const app = getApp();
const wuhuUrl = app.globalData.wuhuUrl;
Page({
  data: {
    isAuth: false,
    srcList: [], // 存储拍摄的图片路径
    devicePosition: "back",
    ka: false,
    active: 0,
    userId: ""
  },
  onLoad(options) {
    const userInfo = wx.getStorageSync('userInfo');
    console.log("scan页面", userInfo)
    this.setData({
      userId: userInfo.userId
    });

    const _this = this
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.camera']) {
          _this.setData({
            isAuth: true
          })
        } else {
          wx.authorize({
            scope: 'scope.camera',
            success() {
              _this.setData({
                isAuth: true
              })
            },
            fail() {
              _this.openSetting().then(res => {
                _this.setData({
                  isAuth: true
                })
              })
            }
          })
        }
      },
      fail: res => {
        console.log('获取用户授权信息失败')
      }
    })
  },
  openSetting() {
    const _this = this
    let promise = new Promise((resolve, reject) => {
      wx.showModal({
        title: '授权',
        content: '请先授权获取摄像头权限',
        success(res) {
          if (res.confirm) {
            wx.openSetting({
              success(res) {
                if (res.authSetting['scope.camera']) {
                  resolve(true)
                } else {
                  _this.openSetting().then(res => {
                    resolve(true)
                  })
                }
              },
              fail(res) {
                console.log(res)
              }
            })
          } else if (res.cancel) {
            _this.openSetting().then(res => {
              resolve(true)
            })
          }
        }
      })
    })
    return promise;
  },
  // 拍照
  takePhoto() {
    this.setData({
      ka: true
    })
    setTimeout(() => {
      this.setData({
        ka: false
      })
    }, 200);

    // 创建相机上下文对象
    const ctx = wx.createCameraContext()
    ctx.takePhoto({
      quality: 'high',
      success: (res) => {
        let tempImagePath = res.tempImagePath
        let srcList = this.data.srcList;
        srcList.push(tempImagePath); // 将拍摄的新图片路径添加到列表中
        this.setData({
          srcList: srcList
        })
      }
    })
  },
  // 切换摄像头
  change() {
    wx.showLoading({
      title: '加载中...',
      mask: true // 是否显示透明蒙层，防止触摸穿透，默认为 false
    });
    setTimeout(function () {
      wx.showToast({
        title: '转换成功',
        mask: true ,
        icon:"success"
      });
      wx.hideLoading();
    });
    let position = this.data.devicePosition === 'front' ? "back" : 'front';
    this.setData({
      devicePosition: position
    })
  },
  // 预览图片
  preview(event) {
    let currentSrc = event.currentTarget.dataset.src;
    wx.previewImage({
      current: currentSrc,
      urls: this.data.srcList
    })
  },
  complete() {
    const index = this.data.active
    const app = getApp(); // 获取全局应用实例
    app.globalData.photoList = this.data.srcList; // 将图片路径列表保存到全局变量中
    switch (index) {
      case 0:
        this.callTableExtractAPI()
        break;
      case 1:
        this.callImageToWordAPI()
        break;
      case 2:
        this.callImageToExcelAPI();
        break;
      case 3:
        this.callImageToPDFAPI(); // 调用证件提取的后端 API
        break;
      case 4:
        this.callIDExtractAPI(); // 调用证件提取的后端 API
        break;
      default:
        break;
    }
  },
  // 选择相册图片
  chooseImage() {
    const _this = this;
    wx.chooseImage({
      count: 9 - _this.data.srcList.length, // 最多可以选择的图片张数，这里可以根据需要自行调整
      sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
      sourceType: ['album'], // 可以指定来源是相册还是相机，默认二者都有
      success: function (res) {
        let tempFilePaths = res.tempFilePaths;
        let srcList = _this.data.srcList.concat(tempFilePaths); // 将选择的图片路径添加到列表中
        _this.setData({
          srcList: srcList
        });
      }
    });
  },
  onChange(event) {
    const index = event.detail.index;
    console.log(index)
    this.setData({
      active: index
    }); // 更新选中的标签页索引
  },
  // 调用表格提取的后端 API
  callTableExtractAPI() {
    wx.navigateTo({
      url: '/pages/Bookscan/bookscan'
    });
  },
  // 调用图片转 Word 的后端 API
  callImageToWordAPI() {
    const app = getApp(); // 获取全局应用实例
    const userId = this.data.userId; // 获取用户ID
    const photoList = app.globalData.photoList; // 从全局数据中获取图片列表
    const currentPhoto = photoList[0]; // 获取第一张图片的路径

    wx.getFileSystemManager().readFile({
      filePath: currentPhoto,
      encoding: 'base64',
      success: (res) => {
        const base64Photo = res.data; // 获取图片的base64字符串
        wx.showLoading({
          title: '加载中...',
          mask: true // 是否显示透明蒙层，防止触摸穿透，默认为 false
        });
        // 发送请求到后端API
        // 调用后端API保存文件
        wx.request({
          url: wuhuUrl+'/ft/textin/photo_to_word',
          method: 'POST',
          data: {
            userId: userId,
            base64Data: base64Photo // 将图片的base64字符串传递给后端
          },
          success: (res) => {
            wx.hideLoading();
            const downloadUrl = res.data.data; // 获取文件的下载路径
            console.log(downloadUrl)
            // 显示弹窗询问用户是否要下载文件
            wx.showModal({
              title: '下载Word文件',
              content: '是否要下载Word文件？',
              success: (modalRes) => {
                if (modalRes.confirm) {
                  // 用户点击了确认按钮，开始下载文件
                  wx.downloadFile({
                    url: downloadUrl,
                    success: (downloadRes) => {
                      const filePath = downloadRes.tempFilePath; // 获取临时文件路径

                      // 保存文件到本地
                      wx.saveFile({
                        tempFilePath: filePath,
                        success: (saveRes) => {
                          const savedFilePath = saveRes.savedFilePath; // 获取保存后的文件路径

                          // 提示文件保存成功
                          wx.showToast({
                            title: '文件保存成功',
                            icon: 'success'
                          });

                          // 打开本地文件进行查看
                          wx.openDocument({
                            filePath: savedFilePath,
                            showMenu:true,
                            success: (openRes) => {
                              console.log('文件打开成功');
                            },
                            fail: (openErr) => {
                              console.error('打开文件失败', openErr);
                            }
                          });
                        },
                        fail: (saveErr) => {
                          console.error('保存文件失败', saveErr);
                        }
                      });
                    },
                    fail: (downloadErr) => {
                      console.error('下载文件失败', downloadErr);
                    }
                  });
                } else if (modalRes.cancel) {
                  // 用户点击了取消按钮，不进行任何操作
                  console.log('用户取消下载');
                }
              }
            });
          },
          fail: (err) => {
            wx.hideLoading();
            console.error('请求失败', err);
          }
        });

      },
      fail: (err) => {
        wx.hideLoading();
        console.error(err); // 处理读取文件失败的情况
      }
    });
  },
  // 调用图片转 Excel 的后端 API
  callImageToExcelAPI() {
    const app = getApp(); // 获取全局应用实例
    const userId = this.data.userId; // 获取用户ID
    const photoList = app.globalData.photoList; // 从全局数据中获取图片列表
    const currentPhoto = photoList[0]; // 获取第一张图片的路径

    wx.getFileSystemManager().readFile({
      filePath: currentPhoto,
      encoding: 'base64',
      
      success: (res) => {
        const base64Photo = res.data; // 获取图片的base64字符串
        wx.showLoading({
          title: '加载中...',
          mask: true // 是否显示透明蒙层，防止触摸穿透，默认为 false
        });
        // 发送请求到后端API
        // 调用后端API保存文件
        wx.request({
          url: wuhuUrl+'/ft/textin/photo_to_excel',
          method: 'POST',
          data: {
            userId: userId,
            base64Data: base64Photo // 将图片的base64字符串传递给后端
          },
          success: (res) => {
            console.log(res)
            const downloadUrl = res.data.data; // 获取文件的下载路径
            console.log(downloadUrl)
            wx.hideLoading();
            // 显示弹窗询问用户是否要下载文件
            wx.showModal({
              title: '下载Excel文件',
              content: '是否要下载Excel文件？',
              success: (modalRes) => {
                if (modalRes.confirm) {
                  // 用户点击了确认按钮，开始下载文件
                  wx.downloadFile({
                    url: downloadUrl,
                    success: (downloadRes) => {
                      const filePath = downloadRes.tempFilePath; // 获取临时文件路径

                      // 保存文件到本地
                      wx.saveFile({
                        tempFilePath: filePath,
                        success: (saveRes) => {
                          const savedFilePath = saveRes.savedFilePath; // 获取保存后的文件路径

                          // 提示文件保存成功
                          wx.showToast({
                            title: '文件保存成功',
                            icon: 'success'
                          });
                          // 打开本地文件进行查看
                          wx.openDocument({
                            filePath: savedFilePath,
                            showMenu:true,
                            success: (openRes) => {
                              console.log('文件打开成功');
                            },
                            fail: (openErr) => {
                              console.error('打开文件失败', openErr);
                            }
                          });
                        },
                        fail: (saveErr) => {
                          console.error('保存文件失败', saveErr);
                        }
                      });
                      wx.navigateTo({
                        url: '/pages/echarts/echarts',
                      })
                    },
                    fail: (downloadErr) => {
                      console.error('下载文件失败', downloadErr);
                    }
                  });
                } else if (modalRes.cancel) {
                  // 用户点击了取消按钮，不进行任何操作
                  console.log('用户取消下载');
                }
              }
            });
          },
          fail: (err) => {
            console.error('请求失败', err);
          }
        });

      },
      fail: (err) => {
        console.error(err); // 处理读取文件失败的情况
      }
    });
  },
  // 调用图片转 PDF 的后端 API
  callImageToPDFAPI() {
    const app = getApp(); // 获取全局应用实例
    const userId = this.data.userId; // 获取用户ID
    const photoList = app.globalData.photoList; // 从全局数据中获取图片列表
  
    // 创建一个 Promise 数组，用于存储读取图片文件的 Promise
    const promises = photoList.map(photoPath => {
      return new Promise((resolve, reject) => {
        wx.getFileSystemManager().readFile({
          filePath: photoPath,
          encoding: 'base64',
          success: res => {
            resolve(res.data); // 将读取的图片文件转换为Base64，并将结果传递给Promise的resolve函数
          },
          fail: err => {
            reject(err); // 如果读取文件失败，则将错误信息传递给Promise的reject函数
          }
        });
      });
    });
  
    // 使用 Promise.all() 方法等待所有Promise完成
    Promise.all(promises)
      .then(base64Images => {
        // 在这里，base64Images是一个包含所有图片Base64数据的数组
        // 发送 base64Images 和 userId 给后端
        console.log(base64Images);
        console.log(userId);
        wx.showLoading({
          title: '加载中...',
          mask: true // 是否显示透明蒙层，防止触摸穿透，默认为 false
        });
        wx.request({
          url: wuhuUrl+'/ft/textin/image-to-pdf',
          method: 'POST',
          data: {
            userId: userId,
            imageData: base64Images // 将图片的base64字符串列表传递给后端
          },
          success: (res) => {
            wx.hideLoading();
            const downloadUrl = res.data.data; // 获取文件的下载路径
            console.log(downloadUrl)
            // 显示弹窗询问用户是否要下载文件
            wx.showModal({
              title: '下载PDF文件',
              content: '是否要下载pdf文件？',
              success: (modalRes) => {
                if (modalRes.confirm) {
                  // 用户点击了确认按钮，开始下载文件
                  wx.downloadFile({
                    url: downloadUrl,
                    success: (downloadRes) => {
                      const filePath = downloadRes.tempFilePath; // 获取临时文件路径

                      // 保存文件到本地
                      wx.saveFile({
                        tempFilePath: filePath,
                        success: (saveRes) => {
                          const savedFilePath = saveRes.savedFilePath; // 获取保存后的文件路径
                          wx.setStorageSync('savedWordFilePath', savedFilePath);
                          // 提示文件保存成功
                          wx.showToast({
                            title: '文件保存成功',
                            icon: 'success'
                          });

                          // 打开本地文件进行查看
                          wx.openDocument({
                            filePath: savedFilePath,
                            showMenu:true,
                            success: (openRes) => {
                              console.log('文件打开成功');
                            },
                            fail: (openErr) => {
                              console.error('打开文件失败', openErr);
                            }
                          });
                        },
                        fail: (saveErr) => {
                          console.error('保存文件失败', saveErr);
                        }
                      });
                    },
                    fail: (downloadErr) => {
                      console.error('下载文件失败', downloadErr);
                    }
                  });
                } else if (modalRes.cancel) {
                  // 用户点击了取消按钮，不进行任何操作
                  console.log('用户取消下载');
                }
              }
            });
          },
          fail: (err) => {
            console.error('请求失败', err);
            wx.hideLoading();
          }
        });
      })
      .catch(err => {
        console.error('读取图片文件失败:', err);
      });
  }
  ,
  // 调用证件提取的后端 API
  callIDExtractAPI() {
    wx.navigateTo({
      url: '/pages/scan/edit/edit'
    });
  },
  deleteImage(event) {
    const index = event.currentTarget.dataset.index; // 获取待删除图片的索引
    let srcList = this.data.srcList.slice(); // 复制图片列表
    srcList.splice(index, 1); // 删除指定索引位置的图片
    this.setData({
      srcList: srcList // 更新图片列表数据
    });
  }
})